package com.lainiao.response;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  乱码：字节流响应数据
 *  乱码原因：
 *      1. 由于是传输字节，可能出现乱码，也可能正确显示
 *      2. 当服务端给的字节，恰好与客户端使用的编码方式一致时，文本显示正确
 *      3. 但我们不能碰运气，所以还是要，直接设置
 *  解决方法 1：
 *      1. 设置服务器的编码格式
 *          response.setCharacterEncoding("UTF-8");
 *      2. 设置响应数据类型和客户端解码格式
 *          response.setHeader("content-type","text/html;charset=UTF-8");
 *      3. 总结：
 *          设置 服务端和客户端 都支持中文，且编码格式一致
 *  解决方法 2：（一般用这个）
 *      1. 同时设置客户端和服务端的 编码格式
 *          response.setContentType("text/html;charset=UTF-8");
 */
@WebServlet("/res")
public class response02_ResponseEncodingStream extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        /**
         * 方案一
         */
        // 1. 设置服务器的编码格式
        response.setCharacterEncoding("UTF-8");
        // 2. 设置响应数据类型和客户端解码格式
        response.setHeader("content-type","text/html;charset=UTF-8");


        /**
         * 方案二
         */
//        // 1. 同时设置客户端和服务端的 编码格式
//        response.setContentType("text/html;charset=UTF-8");


        /**
         * 输出数据
         */
        // 1. 获取字节输出流
        ServletOutputStream stream = response.getOutputStream();
        // 2. 向浏览器输出字节流数据（ getBytes 要写上 UTF-8 ）
        stream.write("<h2>亚希拉雷·梁非凡！<h2>".getBytes("UTF-8"));
    }
}
